home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
comm
/
term
/
term_source.lha
/
Extras
/
Source
/
term-source.lha
/
ScreenPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-20
|
34KB
|
1,329 lines
/*
** ScreenPanel.c
**
** Editing panel for screen configuration
**
** Copyright © 1990-1996 by Olaf `Olsen' Barthel
** All Rights Reserved
**
** :ts=4
*/
#ifndef _GLOBAL_H
#include "Global.h"
#endif
enum { GAD_SCREENMODE=1000,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,
GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
GAD_STATUS_LINE,GAD_PAGER,GAD_PAGEGROUP,
GAD_USE,GAD_CANCEL,GAD_DEFAULT
};
/* CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode):
*
* This routine rolls the dice and determines whether the user should
* be allowed to change the screen colours or rendering pens.
*/
STATIC BOOL
CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode)
{
if(LocalConfig->ScreenConfig->ColourMode == OriginalColourMode && !LocalConfig->ScreenConfig->UseWorkbench && LocalConfig->ScreenConfig->ColourMode == Config->ScreenConfig->ColourMode && Screen)
{
LONG ThisDepth,RequestedDepth;
ThisDepth = GetBitMapDepth(Window->WScreen->RastPort.BitMap);
switch(LocalConfig->ScreenConfig->ColourMode)
{
case COLOUR_AMIGA:
RequestedDepth = 2;
break;
case COLOUR_EIGHT:
RequestedDepth = 3;
break;
case COLOUR_SIXTEEN:
RequestedDepth = 4;
break;
case COLOUR_MONO:
RequestedDepth = 1;
break;
}
return((BOOL)(ThisDepth < RequestedDepth));
}
else
return(TRUE);
}
STATIC BOOL
ScreenPenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,LONG Depth)
{
LayoutHandle *Handle;
UWORD PrivateArray[16];
BOOL Result;
Result = FALSE;
CopyMem(Array,PrivateArray,sizeof(PrivateArray));
if(Handle = LT_CreateHandleTags(Window->WScreen,
LAHN_LocaleHook, &LocaleHook,
LAHN_ExactClone, TRUE,
TAG_DONE))
{
struct Window *PanelWindow;
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
LA_LabelID, MSG_PENPANEL_DRAWING_PENS_TXT,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_BACKGROUND_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[BACKGROUNDPEN],
LA_Chars, 15,
LA_ID, 100 + BACKGROUNDPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_TEXT_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[TEXTPEN],
LA_ID, 100 + TEXTPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_IMPORTANT_TEXT_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[HIGHLIGHTTEXTPEN],
LA_ID, 100 + HIGHLIGHTTEXTPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_BRIGHT_EDGES_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[SHINEPEN],
LA_ID, 100 + SHINEPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_DARK_EDGES_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[SHADOWPEN],
LA_ID, 100 + SHADOWPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_FILLPEN_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[FILLPEN],
LA_ID, 100 + FILLPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_FILLTEXTPEN_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[FILLTEXTPEN],
LA_ID, 100 + FILLTEXTPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_BARFILLPEN_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[BARBLOCKPEN],
LA_ID, 100 + BARBLOCKPEN,
TAG_DONE);
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_PENPANEL_BARTEXTPEN_TXT,
GTPA_Depth, Depth,
LAPA_SmallPalette, TRUE,
LA_UWORD, &PrivateArray[BARDETAILPEN],
LA_ID, 100 + BARDETAILPEN,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type,XBAR_KIND,
TAG_DONE);
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_PENPANEL_STANDARDPENS_TXT,
LA_ID, GAD_DEFAULT,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type,VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,LA_Type,HORIZONTAL_KIND,
LAGR_SameSize, TRUE,
LAGR_Spread, TRUE,
TAG_DONE);
{
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GLOBAL_USE_GAD,
LA_ID, GAD_USE,
LABT_ReturnKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GLOBAL_CANCEL_GAD,
LA_ID, GAD_CANCEL,
LABT_EscKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
if(PanelWindow = LT_Build(Handle,
LAWN_TitleID, MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
LAWN_HelpHook, &GuideHook,
LAWN_Parent, Window,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_RMBTrap, TRUE,
WA_Activate, TRUE,
WA_SimpleRefresh, TRUE,
TAG_DONE))
{
struct IntuiMessage *Message;
struct Gadget *MsgGadget;
ULONG MsgClass;
BOOL Done;
LONG i;
PushWindow(PanelWindow);
LT_ShowWindow(Handle,TRUE);
GuideContext(CONTEXT_SCREEN);
Done = FALSE;
do
{
if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
break;
while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
{
MsgClass = Message->Class;
MsgGadget = (struct Gadget *)Message->IAddress;
LT_ReplyIMsg(Message);
if(MsgClass == IDCMP_GADGETUP)
{
switch(MsgGadget->GadgetID)
{
case GAD_USE:
CopyMem(PrivateArray,Array,sizeof(PrivateArray));
Array[DETAILPEN] = PrivateArray[BACKGROUNDPEN];
Array[BLOCKPEN] = PrivateArray[SHADOWPEN];
Array[BARTRIMPEN] = PrivateArray[BARDETAILPEN];
Result = Done = TRUE;
break;
case GAD_CANCEL:
Done = TRUE;
break;
case GAD_DEFAULT:
for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
break;
}
}
}
}
while(!Done);
PopWindow();
}
LT_DeleteHandle(Handle);
}
return(Result);
}
BOOL
ScreenPanel(struct Window *Parent,struct Configuration *LocalConfig)
{
STATIC LONG PageTitleID[6] =
{
MSG_V36_0163,
MSG_V36_0164,
MSG_V36_0165,
MSG_V36_0166,
MSG_PENPANEL_DRAWING_PENS_TXT,
-1
};
STATIC BYTE InitialPage = 0;
LayoutHandle *Handle;
STRPTR PageTitle[6];
BOOL UseIt;
UseIt = FALSE;
LocalizeStringTable(PageTitle,PageTitleID);
/* Make a backup of the current settings. We will modify only */
/* the backup */
SaveConfig(LocalConfig,PrivateConfig);
/* If the settings aren't yet patched up for 96 bit mode, */
/* do it now. */
if(!PrivateConfig->ScreenConfig->UseColours96)
{
Colour12x96(PrivateConfig->ScreenConfig->Colours,PrivateConfig->ScreenConfig->Colours96,16);
PrivateConfig->ScreenConfig->UseColours96 = TRUE;
}
if(Handle = LT_CreateHandleTags(Parent->WScreen,
LAHN_LocaleHook, &LocaleHook,
LAHN_ExactClone, TRUE,
LAHN_ExitFlush, FALSE,
TAG_DONE))
{
UBYTE ModeName[DISPLAYNAMELEN + 1],FontName[MAX_FILENAME_LENGTH];
struct Window *LocalWindow;
ULONG DisplayMode;
BOOL FixedColours;
FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
/* Get the desired screen display mode */
DisplayMode = PrivateConfig->ScreenConfig->DisplayMode;
/* Is the requested screen display mode available on this machine? */
if(ModeNotAvailable(DisplayMode))
{
struct Screen *PubScreen = LockPubScreen(NULL);
/* Lock the default public screen */
if(PubScreen)
{
struct DimensionInfo DimensionInfo;
/* Use the default display mode */
DisplayMode = GetVPModeID(&PubScreen->ViewPort);
/* Get the default screen size for this display mode */
if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,DisplayMode))
{
LONG Width,Height;
Width = DimensionInfo.TxtOScan.MaxX - DimensionInfo.TxtOScan.MinX + 1;
Height = DimensionInfo.TxtOScan.MaxY - DimensionInfo.TxtOScan.MinY + 1;
/* If the screen is set to a specific size, override */
/* these settings with defaults. */
if(Width != PrivateConfig->ScreenConfig->DisplayWidth && PrivateConfig->ScreenConfig->DisplayWidth > 0)
PrivateConfig->ScreenConfig->DisplayWidth = Width;
if(Height != PrivateConfig->ScreenConfig->DisplayHeight && PrivateConfig->ScreenConfig->DisplayHeight > 0)
PrivateConfig->ScreenConfig->DisplayHeight = Height;
}
UnlockPubScreen(NULL,PubScreen);
}
else
DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY; /* Catch all... */
}
/* The name of the display mode chosen */
GetModeName(DisplayMode,ModeName,sizeof(ModeName));
BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
/* If we cannot change the colours, or would */
/* display the wrong colours when choosing the */
/* rendering pens, don't display the last */
/* two pages */
if(FixedColours)
{
if(InitialPage > 2)
InitialPage = 2;
PageTitle[3] = NULL;
}
if(!Kick30)
{
if(InitialPage > 3)
InitialPage = 3;
PageTitle[4] = NULL;
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type,VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, TAB_KIND,
LA_ID, GAD_PAGER,
LA_LabelID, MSG_XFER_PAGE_TXT,
GTCY_Labels, PageTitle,
LACY_AutoPageID,GAD_PAGEGROUP,
LACY_TabKey, TRUE,
LA_BYTE, &InitialPage,
LATB_FullWidth, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
LA_ID, GAD_PAGEGROUP,
LAGR_ActivePage,InitialPage,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
LA_Chars, DISPLAYNAMELEN,
LA_ID, GAD_SCREENMODE,
GTTX_Text, ModeName,
GTTX_Border, TRUE,
LATX_Picker, TRUE,
LATX_LockSize, TRUE,
TAG_DONE);
LT_New(Handle,
LA_Type, TEXT_KIND,
LA_LabelID, MSG_SCREENPANEL_SCREEN_FONT_GAD,
LA_ID, GAD_FONT,
LA_Chars, DISPLAYNAMELEN,
GTTX_Text, FontName,
GTTX_Border, TRUE,
LATX_Picker, TRUE,
LATX_LockSize, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
if(Kick30)
{
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->FasterLayout,
TAG_DONE);
}
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->MakeScreenPublic,
LA_ID, GAD_MAKESCREENPUBLIC,
GA_Disabled, PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, XBAR_KIND,
TAG_DONE);
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_ID, GAD_USE_PUBSCREEN,
LA_LabelID, MSG_SCREENPANEL_USE_WORKBENCH_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, STRING_KIND,
LA_LabelID, MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
LA_ID, GAD_PUBSCREENNAME,
LA_STRPTR, PrivateConfig->ScreenConfig->PubScreenName,
LA_Chars, 14,
GTST_MaxChars, sizeof(PrivateConfig->ScreenConfig->PubScreenName) - 1,
LAST_Picker, TRUE,
GA_Disabled, !PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_SCREEN_TITLE_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->TitleBar,
LA_ID, GAD_SCREENTITLE,
GA_Disabled, PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_WINDOW_BORDER_TXT,
LA_BYTE, &PrivateConfig->ScreenConfig->ShareScreen,
LA_ID, GAD_WINDOW_BORDER,
GA_Disabled, PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_New(Handle,
LA_Type, XBAR_KIND,
TAG_DONE);
PrivateConfig->ScreenConfig->StatusLine &= 0xF;
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
LA_BYTE, &PrivateConfig->ScreenConfig->SplitStatus,
LA_ID, GAD_SPLIT_STATUS,
GA_Disabled, !PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, CYCLE_KIND,
LA_LabelID, MSG_SCREENPANEL_STATUS_LINE_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->StatusLine,
LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
LACY_LastLabel, MSG_SCREENPANEL_STATUS_COMPACT_TXT,
LA_ID, GAD_STATUS_LINE,
TAG_DONE);
LT_New(Handle,
LA_Type, CYCLE_KIND,
LA_LabelID, MSG_SCREENPANEL_ONLINE_TIME_GAD,
LA_BYTE, &PrivateConfig->ScreenConfig->TimeMode,
LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
LACY_LastLabel, MSG_SCREENPANEL_TIME_BOTH_TXT,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, MX_KIND,
LA_LabelID, MSG_SCREENPANEL_COLOUR_GAD,
LA_WORD, &PrivateConfig->ScreenConfig->ColourMode,
LA_ID, GAD_COLOURMODE,
LAMX_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
LAMX_LastLabel, MSG_SCREENPANEL_COLOUR_MONO_TXT,
TAG_DONE);
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_SCREENPANEL_BLINKING_GAD,
LA_ID, GAD_BLINKING,
LA_BYTE, &PrivateConfig->ScreenConfig->Blinking,
GA_Disabled, PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,
LA_ExtraSpace, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
if(!FixedColours)
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LONG Depth;
switch(PrivateConfig->ScreenConfig->ColourMode)
{
case COLOUR_MONO:
Depth = 1;
break;
case COLOUR_AMIGA:
Depth = 2;
break;
case COLOUR_EIGHT:
Depth = 3;
break;
case COLOUR_SIXTEEN:
Depth = 4;
break;
}
if(PrivateConfig->ScreenConfig->UseWorkbench)
{
LONG i,MaxDepth = 4;
for(i = 0 ; i < 4 ; i++)
{
if((1L << i) > Window->WScreen->ViewPort.ColorMap->Count)
{
MaxDepth = i;
break;
}
}
if(Depth > MaxDepth)
Depth = MaxDepth;
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
STRPTR ColourFormat;
LONG ColourMax;
if(Kick30)
{
ColourMax = 255;
ColourFormat = "%3ld";
}
else
{
ColourMax = 15;
ColourFormat = "%2ld";
}
LT_New(Handle,
LA_Type, PALETTE_KIND,
LA_LabelID, MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
LA_ID, GAD_PALETTE,
LA_Chars, 12,
GTPA_Depth, Depth,
TAG_DONE);
LT_New(Handle,
LA_Type, SliderType,
LA_LabelID, MSG_SCREENPANEL_RED_GAD,
LA_ID, GAD_RED,
GTSL_Min, 0,
GTSL_Max, ColourMax,
GTSL_Level, 0,
GTSL_LevelFormat, ColourFormat,
TAG_DONE);
LT_New(Handle,
LA_Type, SliderType,
LA_LabelID, MSG_SCREENPANEL_GREEN_GAD,
LA_ID, GAD_GREEN,
GTSL_Min, 0,
GTSL_Max, ColourMax,
GTSL_Level, 0,
GTSL_LevelFormat, ColourFormat,
TAG_DONE);
LT_New(Handle,
LA_Type, SliderType,
LA_LabelID, MSG_SCREENPANEL_BLUE_GAD,
LA_ID, GAD_BLUE,
GTSL_Min, 0,
GTSL_Max, ColourMax,
GTSL_Level, 0,
GTSL_LevelFormat, ColourFormat,
TAG_DONE);
LT_New(Handle,
LA_Type, XBAR_KIND,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_SCREENPANEL_USE_DEFAULT_TXT,
LA_ID, GAD_RESET,
LA_Chars, 16,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
if(Kick30)
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, CHECKBOX_KIND,
LA_LabelID, MSG_PENPANEL_STANDARDPENS_TXT,
LA_ID, GAD_STDPENS,
LA_BYTE, &PrivateConfig->ScreenConfig->UsePens,
GA_Disabled, PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_PENPANEL_EDITPENS_TXT,
LA_ID, GAD_EDITPENS,
GA_Disabled, PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
}
}
LT_EndGroup(Handle);
}
LT_New(Handle,
LA_Type, VERTICAL_KIND,
TAG_DONE);
{
LT_New(Handle,
LA_Type, XBAR_KIND,
LAXB_FullSize, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_New(Handle,LA_Type,HORIZONTAL_KIND,
LAGR_SameSize, TRUE,
LAGR_Spread, TRUE,
TAG_DONE);
{
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GLOBAL_USE_GAD,
LA_ID, GAD_USE,
LABT_ReturnKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_New(Handle,
LA_Type, BUTTON_KIND,
LA_LabelID, MSG_GLOBAL_CANCEL_GAD,
LA_ID, GAD_CANCEL,
LABT_EscKey, TRUE,
LABT_ExtraFat, TRUE,
TAG_DONE);
LT_EndGroup(Handle);
}
LT_EndGroup(Handle);
}
if(LocalWindow = LT_Build(Handle,
LAWN_TitleID, MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT,
LAWN_HelpHook, &GuideHook,
LAWN_Parent, Parent,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_RMBTrap, TRUE,
WA_Activate, TRUE,
WA_SimpleRefresh, TRUE,
TAG_DONE))
{
struct IntuiMessage *Message;
struct ViewPort *LocalVPort;
LONG ColourNumber,Count,i;
struct Gadget *MsgGadget;
WORD Red,Green,Blue;
UWORD *DefaultPens;
ULONG MsgClass;
UWORD MsgCode;
LONG Depth;
BOOL Done;
ColourNumber = 0;
LocalVPort = &LocalWindow->WScreen->ViewPort;
switch(PrivateConfig->ScreenConfig->ColourMode)
{
case COLOUR_MONO:
DefaultPens = MonoPens;
Depth = 1;
break;
case COLOUR_AMIGA:
DefaultPens = StandardPens;
Depth = 2;
break;
case COLOUR_EIGHT:
DefaultPens = ANSIPens;
Depth = 3;
break;
case COLOUR_SIXTEEN:
if(Kick30)
DefaultPens = NewEGAPens;
else
DefaultPens = EGAPens;
Depth = 4;
break;
}
for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
{
if(PrivateConfig->ScreenConfig->PenArray[i])
Count++;
}
if(!Count)
CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
PrivateConfig->ScreenConfig->DisplayMode = DisplayMode;
if(!FixedColours)
{
if(Kick30)
{
Red = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
Green = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
Blue = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
}
else
{
Red = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
Green = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
Blue = (PrivateConfig->ScreenConfig->Colours[ColourNumber] ) & 0xF;
}
LT_SetAttributes(Handle,GAD_RED, GTSL_Level, Red, TAG_DONE);
LT_SetAttributes(Handle,GAD_GREEN, GTSL_Level, Green, TAG_DONE);
LT_SetAttributes(Handle,GAD_BLUE, GTSL_Level, Blue, TAG_DONE);
PaletteSetup(PrivateConfig);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
}
GuideContext(CONTEXT_SCREEN);
PushWindow(LocalWindow);
LT_ShowWindow(Handle,TRUE);
Done = FALSE;
do
{
if(Wait(PORTMASK(LocalWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
break;
while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
{
MsgClass = Message->Class;
MsgCode = Message->Code;
MsgGadget = (struct Gadget *)Message->IAddress;
LT_ReplyIMsg(Message);
if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_MOUSEMOVE || MsgClass == IDCMP_GADGETDOWN)
{
switch(MsgGadget->GadgetID)
{
case GAD_RED:
if(Kick30)
Red = MsgCode;
else
Red = (MsgCode << 4) | MsgCode;
PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] = SPREAD(Red);
PaletteSetup(PrivateConfig);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
break;
case GAD_GREEN:
if(Kick30)
Green = MsgCode;
else
Green = (MsgCode << 4) | MsgCode;
PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] = SPREAD(Green);
PaletteSetup(PrivateConfig);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
break;
case GAD_BLUE:
if(Kick30)
Blue = MsgCode;
else
Blue = (MsgCode << 4) | MsgCode;
PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] = SPREAD(Blue);
PaletteSetup(PrivateConfig);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
break;
case GAD_STDPENS:
LT_SetAttributes(Handle,GAD_EDITPENS,
GA_Disabled,PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
TAG_DONE);
break;
case GAD_USE_PUBSCREEN:
LT_SetAttributes(Handle,GAD_PUBSCREENNAME, GA_Disabled,!PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC, GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
LT_SetAttributes(Handle,GAD_SCREENTITLE, GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
LT_SetAttributes(Handle,GAD_WINDOW_BORDER, GA_Disabled,PrivateConfig->ScreenConfig->UseWorkbench,TAG_DONE);
LT_SetAttributes(Handle,GAD_BLINKING, GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
LT_SetAttributes(Handle,GAD_SPLIT_STATUS, GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
LT_SetAttributes(Handle,GAD_PALETTE, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_RED, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_GREEN, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_BLUE, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_RESET, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_EDITPENS,
GA_Disabled, PrivateConfig->ScreenConfig->UsePens || PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
TAG_DONE);
LT_SetAttributes(Handle,GAD_STDPENS,
GTCB_Checked, PrivateConfig->ScreenConfig->UsePens = TRUE,
GA_Disabled, PrivateConfig->ScreenConfig->UseWorkbench || FixedColours,
TAG_DONE);
break;
case GAD_WINDOW_BORDER:
LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
break;
case GAD_COLOURMODE:
if(!ModeOkay(PrivateConfig->ScreenConfig->DisplayMode) && PrivateConfig->ScreenConfig->ColourMode > COLOUR_AMIGA)
LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
FixedColours = CannotChangeColours(PrivateConfig,LocalConfig->ScreenConfig->ColourMode);
LT_SetAttributes(Handle,GAD_PALETTE, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_RED, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_GREEN, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_BLUE, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_RESET, GA_Disabled,FixedColours,TAG_DONE);
LT_SetAttributes(Handle,GAD_BLINKING, GA_Disabled,PrivateConfig->ScreenConfig->ColourMode == COLOUR_MONO,TAG_DONE);
switch(PrivateConfig->ScreenConfig->ColourMode)
{
case COLOUR_MONO:
DefaultPens = MonoPens;
Depth = 1;
break;
case COLOUR_AMIGA:
DefaultPens = StandardPens;
Depth = 2;
break;
case COLOUR_EIGHT:
DefaultPens = ANSIPens;
Depth = 3;
break;
case COLOUR_SIXTEEN:
DefaultPens = EGAPens;
Depth = 4;
break;
}
LT_SetAttributes(Handle,GAD_EDITPENS,
GA_Disabled, FixedColours,
TAG_DONE);
LT_SetAttributes(Handle,GAD_STDPENS,
GA_Disabled, FixedColours,
TAG_DONE);
Default2CurrentPalette(PrivateConfig);
break;
case GAD_EDITPENS:
LT_LockWindow(LocalWindow);
if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
{
UWORD LocalPens[16];
CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
if(ScreenPenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
{
CopyMem(LocalPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
}
}
else
ScreenPenPanel(LocalWindow,PrivateConfig->ScreenConfig->PenArray,DefaultPens,Depth);
LT_UnlockWindow(LocalWindow);
LT_ShowWindow(Handle,TRUE);
break;
case GAD_PALETTE:
ColourNumber = MsgCode;
if(Kick30)
{
Red = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
Green = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
Blue = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
}
else
{
Red = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
Green = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
Blue = (PrivateConfig->ScreenConfig->Colours[ColourNumber] ) & 0xF;
}
LT_SetAttributes(Handle,GAD_RED, GTSL_Level, Red, TAG_DONE);
LT_SetAttributes(Handle,GAD_GREEN, GTSL_Level, Green, TAG_DONE);
LT_SetAttributes(Handle,GAD_BLUE, GTSL_Level, Blue, TAG_DONE);
break;
case GAD_RESET:
Default2CurrentPalette(PrivateConfig);
if(Kick30)
{
Red = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 0] >> 24;
Green = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 1] >> 24;
Blue = PrivateConfig->ScreenConfig->Colours96[ColourNumber * 3 + 2] >> 24;
}
else
{
Red = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 8) & 0xF;
Green = (PrivateConfig->ScreenConfig->Colours[ColourNumber] >> 4) & 0xF;
Blue = (PrivateConfig->ScreenConfig->Colours[ColourNumber] ) & 0xF;
}
LT_SetAttributes(Handle,GAD_RED, GTSL_Level, Red, TAG_DONE);
LT_SetAttributes(Handle,GAD_GREEN, GTSL_Level, Green, TAG_DONE);
LT_SetAttributes(Handle,GAD_BLUE, GTSL_Level, Blue, TAG_DONE);
PaletteSetup(PrivateConfig);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
break;
case GAD_USE:
LT_UpdateStrings(Handle);
if(!FixedColours)
PaletteSetup(PrivateConfig);
else
{
if(PrivateConfig->ScreenConfig->ColourMode != PrivateConfig->ScreenConfig->ColourMode)
Default2CurrentPalette(PrivateConfig);
}
if(PrivateConfig->ScreenConfig->PenColourMode != PrivateConfig->ScreenConfig->ColourMode)
{
CopyMem(DefaultPens,PrivateConfig->ScreenConfig->PenArray,16 * sizeof(UWORD));
PrivateConfig->ScreenConfig->PenColourMode = PrivateConfig->ScreenConfig->ColourMode;
}
UseIt = Done = TRUE;
break;
case GAD_CANCEL:
Done = TRUE;
break;
}
}
if(MsgClass == IDCMP_IDCMPUPDATE)
{
switch(MsgGadget->GadgetID)
{
case GAD_FONT:
if(OpenAnyFont(LocalWindow,PrivateConfig->ScreenConfig->FontName,&PrivateConfig->ScreenConfig->FontHeight))
{
BuildFontName(FontName,sizeof(FontName),PrivateConfig->ScreenConfig->FontName,PrivateConfig->ScreenConfig->FontHeight);
LT_SetAttributes(Handle,GAD_FONT,
GTTX_Text, FontName,
TAG_DONE);
}
break;
case GAD_SCREENMODE:
LT_LockWindow(LocalWindow);
if(PickDisplayMode(LocalWindow,&PrivateConfig->ScreenConfig->DisplayMode,PrivateConfig))
{
GetModeName(PrivateConfig->ScreenConfig->DisplayMode,ModeName,sizeof(ModeName));
LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
}
LT_UnlockWindow(LocalWindow);
LT_ShowWindow(Handle,TRUE);
break;
case GAD_STATUS_LINE:
LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig->ScreenConfig->StatusLine || (!PrivateConfig->ScreenConfig->ShareScreen && !PrivateConfig->ScreenConfig->UseWorkbench),TAG_DONE);
break;
case GAD_PUBSCREENNAME:
if(PrivateConfig->ScreenConfig->UseWorkbench)
{
UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
UBYTE LocalBuffer[256];
LT_LockWindow(LocalWindow);
strcpy(DummyBuffer,LT_GetString(Handle,GAD_PUBSCREENNAME));
strcpy(LocalBuffer,DummyBuffer);
if(PickScreen(LocalWindow,DummyBuffer))
{
if(strcmp(DummyBuffer,LocalBuffer))
LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
}
LT_UnlockWindow(LocalWindow);
LT_ShowWindow(Handle,TRUE);
}
break;
}
}
}
}
while(!Done);
PopWindow();
if(((UseIt && Config != LocalConfig) || (!UseIt && Config == LocalConfig)) && !Config->ScreenConfig->UseWorkbench && Screen)
{
PaletteSetup(Config);
LoadColourTable(VPort, NormalColourTable,NormalColours,PaletteSize);
LoadColourTable(LocalVPort, NormalColourTable,NormalColours,PaletteSize);
}
}
LT_DeleteHandle(Handle);
}
if(UseIt)
SwapConfig(LocalConfig,PrivateConfig);
else
SaveConfig(LocalConfig,PrivateConfig);
return(UseIt);
}